package pl.word.app.dao;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;

import pl.word.domain.model.Project;
import pl.word.domain.model.User;

/**
 * Klasa pobierająca uzytkoników/role z bazy danych. 
 * 
 * @author and.lachowski
 * 
 */
@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class UserDao {

	@Inject
	private EntityManager em;
	
	@Inject
	private Logger logger;

	/**
	 * Pobieranie uzytkownika wraz z rolą. Uzytkownik pobierany jest po id. W
	 * razie gdy uzytkonika nie ma w systemie, zwracany jest null.
	 * 
	 * @param username
	 *            login uzytkownika
	 * @return
	 */
	public User getUserWithRoleByUsername(String username) {

		try {
			return (User) em
					.createQuery(
							"FROM User u JOIN FETCH u.role WHERE u.username = :username ")
					.setParameter("username", username).getSingleResult();
		} catch (NoResultException e) {
			logger.log(Level.SEVERE, "Brak uzytkonika o loginie: " + username, e);
			return null;
		}
	

	}

	public void saveNewProject(Project project) {
		em.persist(project);

	}
}
